Django F和Q

  1. F() —- 专门取对象中某列值的操作
  2. Q() —- 对对象的复杂查询

F()允许Django在未实际链接数据的情况下具有对数据库字段的值的引用。通常情况下我们在更新数据时需要先从数据库里将原数据取出后方在内存里,然后编辑某些属性,最后提交。

1
2
3
order = Order.objects.get(orderid='123456789')
order.amount += 1
order.save()

Q对象(django.db.models.Q)可以对关键字参数进行封装,从而更好地应用多个查询。可以组合使用 &(and),|(or),~(not)操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象。

1
2
3
4
Order.objects.get(
Q(desc__startswith='Who'),
Q(create_time=date(2016, 10, 2)) | Q(create_time=date(2016, 10, 6))
)